﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace QL_LichCT.DataLayer
{
    class DataAccessHelper
    {
        #region 1. Khai báo các thành phần dữ liệu
        SqlConnection conn;
        SqlCommand cmd;
        #endregion

        #region 2. Các phương thức khởi tạo
        public DataAccessHelper()
        {
            conn = new SqlConnection(@"Server=.\SQLEXPRESS; Database=QLLichCongTac1; Integrated Security = True");
        }
        #endregion

        #region 3. Các phương thức thao tác với CSDL

        /// </summary>
        /// Phương thức mở kết nối đến CSDL
        /// </summary>

        private void Open()
        {
            if (conn.State == System.Data.ConnectionState.Closed)
                conn.Open();
        }

        /// </summary>
        /// Phương thức ngắt kết nối đến CSDl
        /// </summary>

        private void Close()
        {
            if (conn.State == System.Data.ConnectionState.Open)
                conn.Close();
        }

        /// <summary>
        /// Phương thức lấy về một giá trị từ mệnh đề SELECT
        /// </summary>
        /// <param name="query">Câu lệnh SELECT</param>
        /// <returns>Một đối tượng</returns>

        public object GetVaule(string query)
        {
            Open();
            cmd = new SqlCommand(query, conn);
            object c = cmd.ExecuteScalar();
            Close();
            return c;
        }

        public DataTable GetDataTable(string select)
        {
            SqlDataAdapter da = new SqlDataAdapter(select, conn);
            DataTable dt = new DataTable();
            da.Fill(dt);
            Close();
            return dt;
        }

        public DataSet GetDataSet(string select)
        {
            SqlDataAdapter da = new SqlDataAdapter(select, conn);
            DataSet dt = new DataSet();
            da.Fill(dt);
            Close();
            return dt;
        }

        public int ExecuteNonQuery(string query)
        {
            Open();
            cmd = new SqlCommand(query, conn);
            int c = cmd.ExecuteNonQuery();

            Close();
            return c;

        }

        public int ExecuteStoredProcedure(string spName, string[] pNames, object[] pValues)
        {
            Open();

            // Khai báo và khởi tạo đối tượng Command với tham số tên thủ tục spName
            cmd = new SqlCommand(spName, conn);

            // Khai báo kiểu thủ tục
            cmd.CommandType = CommandType.StoredProcedure;

            // Khai báo tham số SqlParameter
            SqlParameter p;

            // Khởi tạo danh sách các tham số với giá trị tương ứng
            for (int i = 0; i < pNames.Length; i++)
            {
                p = new SqlParameter(pNames[i], pValues[i]);
                cmd.Parameters.Add(p);
            }

            int c = cmd.ExecuteNonQuery();

            Close();
            return c;
        }
        #endregion
    }
}
